
import {request} from "axios";
import axios from "axios";
import { ElMessage } from 'element-plus'
import mhblogconfig from "@/mhblogconfig";
const apiUrl =mhblogconfig.apiUrl

// axios 拦截器
axios.interceptors.response.use(function (response){
    return response.data
},function (error) {
    return Promise.reject(error)
})

// const imgUrl ='http://8.134.215.150:8080'
export function apiPost(url,params) {
    return request({
        url:apiUrl+url,
        method:"post",
        data:params,
        headers: {
            "Content-Type": "application/json;charset=utf-8"
        }
    })
}

// 发送后端数据
export function apiSend(url,params) {

    var isSuccess = true

    axios.post(apiUrl+url,params)
        .then(function (response) {
            if(response.code === 200) {
                ElMessage({
                    message: response.msg,
                    type: 'success',
                })
            }else{
                ElMessage({
                    message: response.msg,
                    type: 'error',
                })
                isSuccess= false
            }

        })
        .catch(function (error) {
            ElMessage({
                message: error,
                type: 'error',
            })
            isSuccess =  false
        });
    return isSuccess
}

// 接收后端数据
export async function apiAcceptData(url, params) {
    const apirsult = await axios.post(apiUrl + url, params)
    if(apirsult.code === 200){
        return apirsult.data
    }else {
        ElMessage({
            message: apirsult.msg,
            type: 'error',
        })
    }
    return undefined
}
//
// export function download(path,filename) {
//     axios.post(
//         apiUrl,
//         {
//             path,
//             filename
//          },
//         responseType:'blob'
//     )
// }
export async function downloadFile(url,params,filename) {
    axios({
        method: 'post',
        url: apiUrl+url,
        data: params,
        headers: {
            'Accept': 'application/octet-stream', // 指定接收的响应类型
        },
        responseType: 'blob'// 设置响应类型为blob
        // responseType: 'blob',
    })
        .then((res) => {
            console.log(res)
            const apiresult = res;

            // 有可能下载失败，比如返回{status: 0},但设置了responseType: 'blob'，axios会把data强制转为blob，导致下载undefined.excel（后缀取决于文件类型，这里只是举例）
            // 解决：将已转为blob类型的data转回json格式，判断是否下载成功
            const r = new FileReader();
            r.onload = function () {
                // 如果JSON.parse(this.result)不报错，说明this.result是json字符串，则可以推测是下载报错情况下返回的对象，类似于{status: 0}
                // 如果JSON.parse(this.result)报错，说明是下载成功，返回的二进制流，则进入catch进行后续处理
                try {
                    const resData = JSON.parse(this.result); // this.result为FileReader获取blob数据转换为json后的数据，即后台返回的原始数据
                    // 如果执行到这里，说明下载报错了，进行后续处理
                    if(resData.status !== 0) {
                        ElMessage({
                            message: "下载失败，"+apiresult.msg,
                            type: 'error',
                        })
                    }
                } catch (err) {
                    // 下载正常处理
                    ElMessage({
                        message: "下载成功",
                        type: 'success',
                    })
                    let blob = new Blob([res.data], { type: 'application/zip' }); //如果文件是excel，把type换成 type: 'application/vnd.ms-excel' 即可

                    let url = window.URL.createObjectURL(blob);
                    const link = document.createElement('a'); // 创建a标签
                    link.href = url;
                    link.download = filename; // 重命名文件
                    link.click();
                    URL.revokeObjectURL(url); // 释放内存
                }
            };
            r.readAsText(apiresult); // FileReader的API
        })
        .catch((res) => {
            console.log(res);
            ElMessage({
                message: "下载失败，"+res,
                type: 'error',
            })
        });
}

export async function downloadXmindFile(url,params,filename) {
    axios({
        method: 'post',
        url: apiUrl+url,
        data: params,
        headers: {
            'Accept': 'application/octet-stream', // 指定接收的响应类型
        },
        responseType: 'blob'// 设置响应类型为blob
        // responseType: 'blob',
    })
        .then((response ) => {
            // 处理文件下载
            console.log(response)
            const url = window.URL.createObjectURL(new Blob([response ]));
            const link = document.createElement('a');
            link.href = url;
            link.setAttribute('download', filename); // 指定下载文件名
            document.body.appendChild(link);
            link.click();
        })
        .catch((res) => {
            console.log(res);
            ElMessage({
                message: "下载失败，"+res,
                type: 'error',
            })
        });
}